package structureModel.appearance;

/**
 * 外观模式
 */
public class Client {

    /**
     * 优点
     1、引入外观模式，是客户对子系统的使用变得简单了，减少了与子系统的关联对象，实现了子系统与客户之间的松耦合关系。
     2、只是提供了一个访问子系统的统一入口，并不影响用户直接使用子系统类
     3、降低了大型软件系统中的编译依赖性，并简化了系统在不同平台之间的移植过程
     缺点
     1、不能很好地限制客户使用子系统类，如果对客户访问子系统类做太多的限制则减少了可变性和灵活性
     2、在不引入抽象外观类的情况下，增加新的子系统可能需要修改外观类或客户端的源代码，违背了“开闭原则”
     * @param args
     *
     * 模式总结
    1、  外观模式的主要优点就在于减少了客户与子系统之间的关联对象，使用客户对子系统的使用变得简单了，也实现了客户与子
    系统之间的松耦合关系。它的缺点就在于违背了“开闭原则”。
    2、  如果需要实现一个外观模式，需要将子系统组合进外观中，然后将工作委托给子系统执行。
     */
    public static void main(String[] args) {
        //实例化组件
        Light light = new Light();
        Television tv = new Television();
        AirCondition ac = new AirCondition();
        Screen screen = new Screen();
        
        WatchTvSwtichFacade watchTv = new WatchTvSwtichFacade(light, ac, tv, screen);
        
        watchTv.on();
        System.out.println("--------------可以看电视了.........");
        watchTv.off();
        System.out.println("--------------可以睡觉了...........");
    }
}